home *** CD-ROM | disk | FTP | other *** search
/ BMUG Revelations / BMUG Revelations.toast / Sound / Sound Utilities / The Sound-Tracker V1.0 / STrI.h < prev    next >
Text File  |  1992-04-23  |  4KB  |  111 lines

  1.  
  2. /* SoundTracker.h - Header for 'STrI' resource */
  3.  
  4. /* Copyright © 1991 by Frank Seide, Koolbarg 39d, D-2000 Hamburg 74, Germany */
  5.  
  6. #ifndef __SOUNDTRACKER__
  7. #define __SOUNDTRACKER__
  8.  
  9. /***** Constants: *****/
  10.  
  11. #define VBLFRAMES 445            /* Number of Frames per 20ms */
  12. #define CHANNELS 4                /* Number of voices */
  13.  
  14. /***** Structures: *****/
  15.  
  16. #define FASTFORWARD 2
  17. #define FASTERFORWARD 4
  18.  
  19. struct MusicRecord {
  20.     Byte fastForward;                /* Fast forward: speed factor */
  21.     Byte ffCounter;
  22.     unsigned int VBLFrames;
  23.     Byte speed;
  24.     Byte songPos;
  25.     int pattPos;
  26.     Byte counter;
  27.     Boolean pattBreak;
  28.     Boolean loopDetect;            /* Detect loops in SoundTracks ? */
  29.     Boolean looping;
  30.     Boolean endOfPiece;            /* TRUE => SoundTrack finished (e.g. no fade out) */
  31.     Boolean nextOne;                /* TRUE => Play next SoundTrack */
  32.     int speedFactor;                /* Speed adjust factor in percent (default 100%) */
  33.     long playingTime;                /* Playing time in 1/50 seconds */
  34.     char reserved[CHANNELS*0x30];
  35. };
  36.  
  37. /* Main data structure; it describes one complete SoundTrack in memory and */
  38. /* contains all flags and internal variables to interpret the SoundTrack. */
  39.  
  40. struct SoundTrack {
  41.     struct PChannel * playRecord;        /* PChannel to which the STrk is linked */
  42.     char signature[21];                    /* SoundTrack name as stored in the file */
  43.     Byte ldOverSampling;
  44.     Boolean check;
  45.     Byte paddedInstruments;            /* Number of instruments not correctly loaded */
  46.     struct MusicRecord musicRecord;    /* Flags and workspace for STrk interpreter */
  47.     Byte numPointers;
  48.     Byte numInstruments;
  49.     int numPatterns;
  50.     long ** pointers;
  51.     Handle patterns;
  52.     long paddedBytes;                    /* Number of bytes missing in file */
  53.     /* some more private data follows here. */
  54. };
  55.  
  56. /***** Error code: *****/
  57.  
  58. #define errBadFormat badMDBErr        /* GetSoundTrack(): No SoundTrack-File */
  59.  
  60. /***** Function prototypes: *****/
  61.  
  62. extern pascal OSErr GetSoundTrack (int vRefNum, StringPtr fName, int ldOverSampling,
  63.                         struct SoundTrack ** *soundTrackHandle, Boolean check);
  64. extern pascal void DisposeSoundTrack (struct SoundTrack ** sth);
  65. extern pascal struct SoundTrack * LockSoundTrack (struct SoundTrack ** soundTrack);
  66. extern pascal void UnlockSoundTrack (struct SoundTrack ** soundTrack);
  67. extern pascal void UnlinkSoundTrack (struct SoundTrack ** soundTrack);
  68. extern pascal void LinkSoundTrack (struct SoundTrack ** soundTrack, struct PChannel * pc);
  69. extern pascal void UpdateSoundTrack (struct SoundTrack ** soundTrack);
  70. extern pascal int VersionSoundTrack();
  71.  
  72. /***** Specification of the SoundTrack- (.mod)-Format: *****/
  73.  
  74. #define SOUNDCHANNELS 4        /* Number of voices */
  75.  
  76. struct Command {            /* One play command in a pattern */
  77.     int InstrHiNibble : 4;    /* Instrument number (Hi-Nibble) */
  78.     int AmigaPeriod : 12;    /* Pitch (Samp. freq. = 3.579545 MHz / AmigaPeriod) */
  79.     int InstrLoNibble : 4;    /* Instrument number (Lo-Nibble) */
  80.     int EffectCmd : 4;        /* Effects: command */
  81.     int EffectArg : 8;        /*            and operand */
  82. };
  83.  
  84. struct Pattern {            /* Pattern = 64 notes to play (each on 4 channels) */
  85.     struct Command Commands[64][SOUNDCHANNELS];
  86. };
  87.  
  88. struct FileInstrData {            /* One instrument descriptor */
  89.     char Filename[22];            /* Amiga filename */
  90.     unsigned int numWords;    /* Sample length in words (!) */
  91.     int volume;                    /* Volume (0..64) */
  92.     unsigned int loopWord;        /* Loop start offset (in words) */
  93.     unsigned int loopWords;    /* Loop length (in words) */
  94. };
  95.  
  96. #define MAXPTRS 128            /* Size of pointer table */
  97. #define MAXPTRNS MAXPTRS    /* Maximum number of patterns */
  98.  
  99. struct SoundTrackSpec {        /* Pseudo data structure to describe file contents: */
  100.     char NameSignature[20];        /* SoundTrack name (not necessarily file name) */
  101.     struct FileInstrData fid[31];    /* 31 or 15 instrument descriptors */
  102.     Byte numPointers;                /* 0x3b6 / 0x1d6 Max. pointer value to use (+1) */
  103.     Byte maxPointers;                /* 0x3b7 / 0x1d7 Useless value */
  104.     Byte oPointers[MAXPTRS];        /* 0x3b8 / 0x1d8 Patterns numbers */
  105.     long longFmtSignature;        /* 0x438 /   -         ('M.K.' or 'FLT4') */
  106.     struct Pattern patterns[];        /* 0x43c / 0x258 Pattern data */
  107. /*    Sample0[];                        /* Sample data of 31 / 15 instruments */
  108. };
  109.  
  110. #endif
  111.